import 'dart:convert';

import 'package:app/http/api_service.dart';
import 'package:app/models/profile.dart';
import 'package:app/widgets/message.dart';
import 'package:flutter/material.dart';
import 'package:shared_preferences/shared_preferences.dart';

class Global {
  static late SharedPreferences _pres; // SharedPreferences实例，可以用来存储
  static Profile profile =
      Profile(); // 需要持久化的全局状态数据(eg: {token:"xxx",userInfo:{name:"xxx",age:"xxx"}})
  static ThemeMode defaultThemeMode = ThemeMode.system; // 主题默认模式(浅色、深色、跟随系统)

  static Future init() async {
    WidgetsFlutterBinding.ensureInitialized(); // 确保在widget树构建完成之前调用

    _pres = await SharedPreferences.getInstance();
    String? _profile = _pres.getString("profile");
    if (_profile != null) {
      // 防止序列化出错
      try {
        profile = Profile.fromJson(jsonDecode(_profile));
        // 登录态处理
      } catch (err) {
        print("本地序列化出错");
      }
    } else {
      // 如果本地没有获取到存储的数据，在这里可以设置一些默认值(implement)
      // eg：profile.xxx = xxx
    }

    // 初始化网络请求服务
    ApiService().init();
    // 初始化loading服务
    Message.init();
  }

  // 持久化存储profile(目前在调用notifyListeners阶段进行存储)
  static saveProfile() {
    // print("保存_profile  ${jsonEncode(profile.toJson())}");
    _pres.setString("profile", jsonEncode(profile.toJson()));
  }

  static clearProfile() {
    profile = Profile();
  }

  static Future<bool> clearSharedPreferences() {
    return _pres.clear();
  }
}

// 实现JSON转model类
// 实现持久化存储与Provider联动
